3. Matrizen, Rechenoperationen, Inverse, Transponierte, Matrizenpotenzen, Matrixexponentialfunktion, Rang, Dimension, Spalten- und Zeilenoperationen, spezielle Darstellungsformen von Matrizen, Spur, Kondition, positiv und negativ (semi-)definite, orthogonale, unit\344re und \344hnliche Matrizen3.1. Definition von Matrizen:Zur Definition von Matrizen A ben\366tigen wir durchweg das "LinearAlgebra"-Pakte, das durch die Eingabe "with(LinearAlgebra):" eingebunden wird. Anschlie\337end definiert man eine mxn-dimensionale Matrix durch "<<x_11,...,x_m1>|...|<x_1n,...,x_mn>>" (bzw. "<<x_11|...|x_1n>,...,<x_m1|...|x_mn>>" oder "Matrix([[x_11,...,x_1n],...,[xm1,...,x_mn]])"). In der Matrizenschreibweise deutet "|" auf den Beginn einer neuen Spalte und "," auf den Beginn einer neuen Zeile hin. Alternativ zu diesem Paket, gibt es auch das Paket "linalg", dessen entsprechende Funktionen wir lediglich am Rande erw\344hnen werden. In diesem Zusammenhang wird eine Matrix A durch "matrix([[x_11,...,x_1n],...,[xm1,...,x_mn]])" definiert. Beispiele:A := <<1,3>|<2,4>>; (Matrix)
A := <<1|2>,<3|4>>; (Matrix)
with(LinearAlgebra):
A := Matrix([[1,2],[3,4]]); (Matrix, ben\366tigt LinearAlgebra)Es kann auch auf einzelne Matrizenelemente zugegriffen werden. Beispiel:with(LinearAlgebra):
A := Matrix([[1,2],[3,4]]):
A[1,2];Aufgaben: Definiere die folgende Matrizen
a) (1, 2, 8), (3, 6, 7), (99, 8.5, 3) (Angaben sind Zeilenvektoren) b) (1, 1, 2), (3, 2, 1), (4, 1, 3) (Angaben sind Zeilenvektoren)
c) (1, 1, -1, -1), (2, 5, -7, -5), (2, -1, 1, 3), (5, 2, -4, 2) (Angaben sind Zeilenvektoren)3.2. Rechenoperationen f\374r Matrizen, Matrizenaddition, Multiplikation mit Skalaren, Matrizenmultiplikation, Multiplikation mit Vektoren, Inversmatrix, Matrizentransposition, Matrizenpotenzen und Matrixexponentialfunktion:Zu den Rechenoperationen von mxn-dimensionalen Matrizen z\344hlen die Matrizenaddition, Multiplikation mit Skalaren, Matrizenmultiplikation und Multiplikation mit Vektoren. Man beachte die Dimensionsanforderungen an die Matrizen f\374r die unterschiedlichen Rechenoperationen. Die Addition A+B zweier mxn-dimensionalen Matrizen A,B l\344sst sich mit den Funktionen "Add(A,B)" und "MatrixAdd(A,B)" (bzw. "matadd(A,B)") berechnen. (Beachte: Die Indizes lassen sich auch tiefstellen, indem wir beispielsweise "a[11]" anstelle von "a_11" schreiben. Der \334bersichtlichkeithalber haben wir diese Schreibweise unterlassen.) Beispiele (f\374r n=m=2):with(LinearAlgebra):
A := Matrix([[1,2],[3,4]]):
B := Matrix([[3,4],[5,6]]):
A+B;
MatrixAdd(A,B);
Add(A,B);Die Multiplikation einer mxn-dimensionalen Matrix A mit einem Skalaren l\344sst sich mit den Funktionen "ScalarMultiply(A,lambda)" und "MatrixScalarMultiply(A,lambda)" (bzw. "scalarmul(A,lambda)") berechnen. Alternativ erhalten wir mit dem Multiplikationssymbols "*" dasselbe Resultat. In manchen F\344llen kann es vorkommen, dass das Ergebnis eventuell erst mit der Funktion "evalm()" ausgewertet werden muss. Beispiel (f\374r n=m=2):with(LinearAlgebra):
A := Matrix([[1,2],[3,4]]):
lambda := 2:
lambda*A;
MatrixScalarMultiply(A,lambda);
ScalarMultiply(A,lambda);Die Multiplikation AB einer mxn-dimensionalen Matrix A und einer nxk-dimensionalen Matrix B l\344sst sich mit den Funktionen "Multiply(A,B)" und "MatrixMatrixMultiply(A,B)" (bzw. "multiply(A,B)") berechnen. Alternativ erhalten wir mit dem Multiplikationssymbols "." (nicht "*"!!!) dasselbe Resultat. In manchen F\344llen kann es vorkommen, dass das Ergebnis eventuell erst mit der Funktion "evalm()" ausgewertet werden muss.Beispiele (f\374r m=4, n=3, k=2):with (LinearAlgebra):
A := Matrix([[3,4,-2],[4,-1,1],[2,2,-3],[1,5,2]]):
B := Matrix([[4,3],[1,2],[7,-5]]):
MatrixMatrixMultiply(A,B);
Multiply(A,B);
A.B;Die Multiplikation Ax einer mxn-dimensionalen Matrix A und eines n-dimensionalen Vektors x l\344sst sich ebenfalls mit den Funktionen "Multiply(A,x)" und "MatrixVectorMultiply(A,x)" (bzw. "multiply(A,x)") berechnen. Beispiele (f\374r m=3, n=2):with(LinearAlgebra):
A := Matrix([[1,2],[3,4],[5,6]]):
x := Vector([0,1]):
Multiply(A,x);Das Invertieren einer nxn-dimensionalen Matrix A wird durch die Funktion "MatrixInverse(A)" (bzw. "inverse(A)") berechnet. Zur Erinnerung: Eine invertierbare Matrix hei\337t nicht-singul\344r und eine nicht-invertierbare Matrix hei\337t singul\344r. Um das Inverse einer nxn-dimensionalen Matrix A \374ber einem endlichen K\366rper zu berechnen, bietet Maple die Routine "Inverse(A) mod n" an. Beispiel (f\374r n=2):with (LinearAlgebra):
A := Matrix([[3,0],[0,3]]):
MatrixInverse(A);
Inverse(A) mod 2;Die Transposition A^T einer mxn-dimensionalen Matrix A l\344sst sich mit den Funktionen "Transpose(A)" (bzw. "transpose(A)") berechnen. Im Komplexen gibt es die Funktionen "HermitianTranspose(A)" (bzw. "htranspose(A)") Beispiele (f\374r m=3, n=2):with(LinearAlgebra):
A := Matrix([[1,2],[3,4],[5,6]]):
Transpose(A);Die Matrizenpotenz A^k einer nxn-dimensionalen Matrix A und einer nat\374rlichen Zahl k wird durch die Funktion "MatrixPower(A,k)" berechnet. Alternativ erhalten wir mit dem Hutsymbols "^" dasselbe Resultat. In manchen F\344llen kann es vorkommen, dass das Ergebnis eventuell erst mit der Funktion "evalm()" ausgewertet werden muss. Beispiel (f\374r n=2, k=2):with(LinearAlgebra):
A := Matrix([[1,2],[3,4]]):
MatrixPower(A,2);
A^5;Die Auswertung der Matrixexponentialfunktion f\374r eine nxn-dimensionalen Matrix A wird durch die Funktion "MatrixExponential(A)" (bzw. "exponential(A)")berechnet. Beispiel:with(LinearAlgebra):
A := Matrix([[-13,-10],[21,16]]):
MatrixExponential(A);Aufgaben: Berechne die Matrizenprodukte AB und BA der folgenden Matrizen. Was l\344sst sich \374ber die Kommutativit\344t der Matrizenmultiplikation aussagen?
a) A= (1,2), (3,4), B=(3,4), (5,6) (jeweils Zeilenvektoren)
F\374r welche Werte a ist die folgende Matrix invertierbar (also nicht-singul\344r) und f\374r welche Werte a ist sie nicht-invertierbar (also singul\344r)
b) (5,-4,a-1,1), (1,0,2,-1), (a,-3,3a,2), (2,-2,-1,1) (jeweils Zeilenvektoren)
Berechne die ersten Matrizenpotenzen der folgenden Matrizen. Was stellst Du fest und welche Matrix ist nilpotent?
c) (4,12,8), (-7,-6,-8), (4,-3,2) (jeweils Zeilenvektoren)
d) (-9,4,-2), (-25,11,-5), (-5,2,0) (jeweils Zeilenvektoren)3.3. Rang, Spaltenraum, Zeilenraum, Dimension, Diagonale, Zeilen- und Spaltenoperationen:Den Rang einer mxn-dimensionalen Matrix A l\344sst sich mit den Funktionen "Rank(A)" (bzw. "rank(A)") berechnen. Beispiel (f\374r m=3, n=2):with(LinearAlgebra):
A := Matrix([[1,2],[3,4],[5,6]]):
Rank(A);Der Zeilenraum und der Spaltenraum einer mxn-dimensionalen Matrix A l\344sst sich mit den Funktionen "RowSpace(A)" (bzw. "rowspace(A)") und "ColumnSpace(A)" (bzw. "colspace(A)") berechnen. Zur Erinnerung: Der Rang einer Matrix A ist die Dimension des Spaltenraums bzw. Zeilenraums der Matrix (diese Dimensionen sind gleich). Beispiel (f\374r m=3, n=2):with(LinearAlgebra):
A := Matrix([[1,2],[3,4],[5,6]]):
RowSpace(A);
ColumnSpace(A);Der Kern (oder auch Nullraum genannt) einer mxn-dimensionalen Matrix A l\344sst sich mit der Funktion "Nullspace(A)" (bzw. "kernel(A)") berechnen. Beispiel (f\374r m=2, n=3):with(LinearAlgebra):
A := Matrix([[1,0,2],[0,0,0]]):
NullSpace(A);Die Dimension einer mxn-dimensionalen Matrix A l\344sst sich mit den Funktionen "Dimension(A)" (bzw. "rank(A)") berechnen. Das Ergebnis wird in der Form "Dimension des Spaltenraums, Dimension des Zeilenraums" ausgegeben. Beispiel (f\374r m=3, n=2):with(LinearAlgebra):
A := Matrix([[1,2],[3,4],[5,6]]):
Dimension(A);Die Dimension des Zeilenraums einer mxn-dimensionalen Matrix A l\344sst sich mit den Funktionen "RowDimension(A)" (bzw. "rowdim(A)") berechnen. Beispiel (f\374r m=3, n=2):with(LinearAlgebra):
A := Matrix([[1,2],[3,4],[5,6]]):
RowDimension(A);Die Dimension des Spaltenraums einer mxn-dimensionalen Matrix A l\344sst sich mit den Funktionen "ColumnDimension(A)" (bzw. "coldim(A)") berechnen. Beispiel (f\374r m=3, n=2):with(LinearAlgebra):
A := Matrix([[1,2],[3,4],[5,6]]):
ColumnDimension(A);Einzelne Zeilen einer mxn-dimensionalen Matrix A lassen sich mit den Funktionen "Row(A,i)" (bzw. "row(A,i)") ausgeben. Beispiel (f\374r m=3, n=2):with(LinearAlgebra):
A := Matrix([[1,2],[3,4],[5,6]]):
Row(A,2);Einzelne Spalten einer mxn-dimensionalen Matrix A lassen sich mit den Funktionen "Column(A,i)" (bzw. "col(A,i)") ausgeben. Beispiel (f\374r m=3, n=2):with(LinearAlgebra):
A := Matrix([[1,2],[3,4],[5,6]]):
Column(A,2);Es gibt eine weitere Vielzahl von Zeilen- und Spaltenmanipulationen, die wir zwar erw\344hnen, aber auf die wir nicht weiter eingehen werden. addrow() : Addiert einen Wert (oder Variable) zu einer Zeile einer Matrix hinzu addcol() : Addiert einen Wert (oder Variable) zu einer Spalten einer Matrix hinzu
mulcol() : Multipliziert einen Wert (oder Variable) zu einer Spalten einer Matrix hinzu
augment() : Verkn\374pft zwei Matrizen (d.h. mach aus zwei Matrizen eine) swaprow() : Dreht jede Zeile einer Matrix anders herum
swapcol() : Dreht jede Spalte einer Matrix anders herum
delrows() : L\366scht einzelne Zeilen einer Matrix
delcols() : L\366scht einzelne Spalten einer Matrix
extend() : Erweitert die Matrix um eine vorgegebene Anzahl an Zeilen und Spalten mit vorgegebenen Wert copyinto() : Kopiert eine Matrix in eine andere Matrix an einer fest vorgegebenen Stelle hinein
submatrix() : Erm\366glich das Arbeiten mit einer Untermatrix einer MatrixDie n-te Diagonale einer mxn-dimensionalen Matrix A l\344sst sich mit den Funktionen "Diagonal(A,n)" ausgeben. F\374r positive n sind dies obere Nebendiagonalen, f\374r negative n sind dies untere Nebendiagonalen, f\374r n=0 ist dies die Hauptdiagonale. Im letzten Fall kann man den Parameter n=0 weglassen. Beispiel (f\374r m=3, n=2):with(LinearAlgebra):
A := Matrix([[1,2],[3,4],[5,6]]):
Diagonal(A);
Diagonal(A,0);
Diagonal(A,-1);
Diagonal(A,1);Aufgaben: Bestimme den Rang, die Dimension, den Spaltenraum, den Zeilenraum und die erste untere Nebendiagonale der folgenden Matrizen:
a) (1,2,-1,0), (2,6,-3,-3), (3,10,-5,-6) (jeweils Zeilenvektoren) b) (1,3), (0,-2), (5,-1), (-2,3) (jeweils Zeilenvektoren) c) (2,3,-4,-7,-3), (3,8,1,-7,-8), (1,4,3,-1,-4), (1,3,1,-2,-3) (jeweils Zeilenvektoren)3.4. Spezielle Darstellungsformen von Matrizen, Einheitsmatrix, Nullmatrix, Zufallsmatrix, Dreiecksmatrix, Diagonalmatrix, Bandmatrix, Jordanblockmatrix, konstante Matrix, Blockmatrix, Zeilen, Spalten, Spur, Kondition, spezielle Matrizen:Eine n-dimensionale Einheitsmatrix erzeugt man mithilfe der Funktion "IdentityMatrix(n)" und eine n-dimensionale Nullmatrix durch "ZeroMatrix(n)", die beide wieder im Paket "LinearAlgebra" enthalten ist. Beispiel (f\374r n=3):with(LinearAlgebra):
IdentityMatrix(3); (Einheitsmatrix)
ZeroMatrix(3); (Nullmatrix)Eine mxn-dimensionale Zufallsmatrix erzeugt man mithilfe der Funktion "RandomMatrix(m,n)" (bzw. "randmatrix(m,n)"). Beispiel (f\374r m=3, n=4):with(LinearAlgebra):
RandomMatrix(3,4); (Zufallsmatrix)Eine mxn-dimensionale Dreiecksmatrix erzeugt man mithilfe der Funktion "Matrix(m, n, [[Zeile_1],...,[Zeile_n]], shape=triangular[lower])", die wieder im Paket "LinearAlgebra" enthalten ist. Sind auf den Diagonalen die Eintr\344ge gleich, so kann man auch die Funktion "BandMatrix(Werte, Diagonale, m, n)" verwenden (dazu sp\344ter). Beispiel (f\374r m=3, n=4):with(LinearAlgebra):
Matrix(3,4,[[x],[y,y],[z,z,z]],shape=triangular[lower]);
BandMatrix([-1,4,-1], 2, 3, 4);Eine mxn-dimensionale Diagonalmatrix erzeugt man mithilfe der Funktion "DiagonalMatrix(Diagonale,m,n)" (bzw. "diag(Diagonale)"). Insofern die Diagonale ausschlie\337lich aus denselben Werten besteht, so k\366nnen wir die Diagonalmatix auch mit der Funktion "ScalarMatrix(Wert,m,n)" erstellen. Beispiele (f\374r m=4, n=5):with(LinearAlgebra):
DiagonalMatrix(<1,2,3,4>, 4, 5);
DiagonalMatrix([1,2,3]);
ScalarMatrix(2,4,5);Eine mxn-dimensionale Bandmatrix erzeugt man mithilfe der Funktion "BandMatrix(Werte, Diagonale, m, n)" (bzw. "band(Werte)". Beispiel (f\374r m=3, n=4):with(LinearAlgebra):
BandMatrix([-1,4,-1], 2, 3, 4);Eine nxn-dimensionale Jordanblockmatrix erzeugt man mithilfe der Funktion "JordanBlockMatrix([Wert1,Gr\366\337e1],[Wert2,Gr\366\337e2],...,[WertM,Gr\366\337eM],n)", wobei Gr\366\337e1+...+Gr\366\337eM<=n gelten muss. Beispiel (f\374r n=5):with(LinearAlgebra):
JordanBlockMatrix([[2,2],[3,2]],5);Eine mxn-dimensionale konstante Matrix erzeugt man mithilfe der Funktion "ConstantMatrix(Wert, m, n)", die wieder im Paket "LinearAlgebra" enthalten ist.Beispiel (f\374r m=3, n=3 und m=3, n=4):with(LinearAlgebra):
ConstantMatrix(n,3,3,outputoptions=[shape=triangular[upper]]);
ConstantMatrix(n,3,4);Erg\344nzung: Eine mxn-dimensionale Blockmatrix erzeugt man mithilfe der Funktion "blockmatrix(m,n,Bl\366cke)"Die Spur einer mxn-dimensionalen Matrix A erh\344lten man mithilfe der Funktion "Trace(A)" (bzw. "trace(A)"). Sie ist definiert durch die Summe der Diagonalelemente der Matrix. Beispiel (m=2, n=2):with(LinearAlgebra):
A := Matrix([[2,1],[-1,2]]);
Trace(A);Die Kondition (oder Konditionszahl) einer quadratischen invertierbaren nxn-Matrix A erh\344lt man mithilfe der Funktion "ConditionNumber(A)" (bzw. "cond(A)"). Sie ist definiert durch norm(A)*norm(A^(-1)). Beispiel (m=2, n=2):with(LinearAlgebra):
A := Matrix([[2,1],[-1,2]]);
ConditionNumber(A);Eine spezielle Matrix ist die Vandermondesche Matrix, die durch die Funktion "VandermondeMatrix(Vektor)" (bzw. "vandermonde(Vektor)") erzeugt wird. Beispiel:with(LinearAlgebra):
x := Vector([a,b,c]):
VandermondeMatrix(x);
Matrix(3, shape=Vandermonde[<a,b,c>]);Um eine symbolische Matrix in Maple zu definieren, m\374ssen wir "Matrix(n,symbol=b)" eingeben, wobei n die Gr\366\337e der Matrix und b das Symbol bezeichnet. Beispiel:with(LinearAlgebra):
Matrix(3,symbol=b);3.5. Eigenschaften von Matrizen, positiv/negativ (semi-)definit, orthogonal, unit\344r und \344hnlichZur \334berpr\374fung, ob es sich bei einer gegebenen nxn-dimensionalen Matrix A um eine positiv/negativ (semi-)definiten Matrix handelt, kann die Funktion "IsDefinite(A, 'property')" (bzw. "definite(A, 'property')") verwendet werden. Beispiel (f\374r n=2):with(LinearAlgebra):
A := Matrix([[3,-1],[1,1]]):
IsDefinite(A, 'query'='positive_definite');
IsDefinite(A, 'query'='positive_semidefinite');
IsDefinite(A, 'query'='negative_definite');
IsDefinite(A, 'query'='negative_semidefinite');Zur \334berpr\374fung, ob es sich bei einer gegebenen nxn-dimensionalen Matrix A um eine Orthogonalmatrix handelt, kann die Funktion "IsOrthogonal(A)" (bzw. "orthog(A)") verwendet werden. F\374r komplexe Matrizen gibt es entsprechend die Funktion "IsUnitary(A)" zur \334berpr\374fung, ob A unit\344r ist. Beispiel (f\374r n=2):with(LinearAlgebra):
A := Matrix([[(1/2)*sqrt(2),(1/2)*sqrt(2)],[-(1/2)*sqrt(2),(1/2)*sqrt(2)]]):
IsOrthogonal(A);
A := Matrix([[1,0],[0,1]]):
IsUnitary(A);Zur \334berpr\374fung, ob es sich bei zwei gegebenen nxn-dimensionalen Matrizen A,B um \344hnliche Matrizen handelt, kann die Funktion "IsSimilar(A,B)" (bzw. "issimilar(A,B)") verwendet werden. Beispiel (f\374r n=2):with(LinearAlgebra):
A := Matrix([[3,-1],[1,1]]):
B := Matrix([[5,2],[-4,1]]):
IsSimilar(A,B);
IsSimilar(A,A);Zur Erinnerung: Eine Matrix A ist eine Drehmatrix, falls sie eine Orthogonalmatrix ist und ihre Determinante den Wert 1 annimmt. In Kapitel 5 werden wir noch, wie die Determinante einer quadratischen Matrix A berechnet wird. Bemerke: Die obige orthogonale Matrix ist insbesondere eine Drehmatrix.TTdSMApJM1JUQUJMRV9TQVZFLzU2OTczMlgsJSlhbnl0aGluZ0c2IjYiW2dsISIlISEhIyUiIyIjIiIlIiIpIiInIiM1NiIKTTdSMApJM1JUQUJMRV9TQVZFLzU3NTI3MlgsJSlhbnl0aGluZ0c2IjYiW2dsISIlISEhIyUiIyIjIiIlIiIpIiInIiM1NiIKTTdSMApJM1JUQUJMRV9TQVZFLzU3OTA0NFgsJSlhbnl0aGluZ0c2IjYiW2dsISIlISEhIyUiIyIjIiIlIiIpIiInIiM1NiIKTTdSMApJM1JUQUJMRV9TQVZFLzU4NTQxNlgsJSlhbnl0aGluZ0c2IjYiW2dsISIlISEhIyUiIyIjIiIjIiInIiIlIiIpNiIKTTdSMApJM1JUQUJMRV9TQVZFLzU4ODIyNFgsJSlhbnl0aGluZ0c2IjYiW2dsISIlISEhIyUiIyIjIiIjIiInIiIlIiIpNiIKTTdSMApJM1JUQUJMRV9TQVZFLzU5MjA2OFgsJSlhbnl0aGluZ0c2IjYiW2dsISIlISEhIyUiIyIjIiIjIiInIiIlIiIpNiIKTTdSMApJM1JUQUJMRV9TQVZFLzYxMDg5MlgsJSlhbnl0aGluZ0c2IjYiW2dsISIlISEhIyUiIyIjIyIiIiIiJCIiIUYqRic2Igo=TTdSMApJM1JUQUJMRV9TQVZFLzYxMzcwMFgsJSlhbnl0aGluZ0c2IjYiW2dsISIlIiEhIyUiIyIjIiIiIiIhRihGJzYiCg==TTdSMApJM1JUQUJMRV9TQVZFLzYyNjgxNlgsJSlhbnl0aGluZ0c2IjYiW2dsISIlISEhIyoiJCIkIiIiRidGJyUiYUclImJHJSJjRyokRigiIiMqCiRGKUYsKiRGKkYsNiIKTTdSMApJNVJUQUJMRV9TQVZFLzIxMzYwNDkyWColKWFueXRoaW5nRzYiNiJbZ2whIyUhISEiJCIkISIjIiIhIiIiRiYKTTdSMApJNVJUQUJMRV9TQVZFLzIxMzYwNTcyWColKWFueXRoaW5nRzYiNiJbZ2whIyUhISEiJCIkIiIhIiIiRidGJgo=TTdSMApJM1JUQUJMRV9TQVZFLzY0ODI4MFguJSlhbnl0aGluZ0c2IyYlJWJhbmRHNiQiIiEiIiI2IltnbCEiJCEhISMrIiYiJiEiRikiIiNGKkYsCkYpIiIkRipGLUYpRik2Igo=TTdSMApJM1JUQUJMRV9TQVZFLzY1MjE3NlgsJSlhbnl0aGluZ0c2IjYiW2dsISIlISEhIyoiJCIkIiIiRidGJyUiYUclImJHJSJjRyokRigiIiMqCiRGKUYsKiRGKkYsNiIKTTdSMApJM1JUQUJMRV9TQVZFLzY1NTAzMlgsJSlhbnl0aGluZ0c2IyYlLFZhbmRlcm1vbmRlRzYjWCpGJDYiNiJbZ2whIyUhISEiJCIkJSJhRyUiCmJHJSJjR0YrW2dsISIlISEhIyoiJCIkIiIiRi9GL0YsRi1GLiokRiwiIiMqJEYtRjEqJEYuRjE2Igo=TTdSMApJM1JUQUJMRV9TQVZFLzcwNDA4MFgsJSlhbnl0aGluZ0c2IjYiW2dsISIlISEhIyoiJCIkJiUiYkc2JCIiIkYqJkYoNiQiIiNGKiZGKDYkCiIiJEYqJkYoNiRGKkYtJkYoNiRGLUYtJkYoNiRGMEYtJkYoNiRGKkYwJkYoNiRGLUYwJkYoNiRGMEYwNiIK